import { constantRoutes, asyncRoutes } from '@/router'

export default {
  namespaced: true,
  state: {
    routes: [...constantRoutes]
  },
  mutations: {
    setRoutes(state, data) {
      state.routes = [...constantRoutes, ...data]
    }
  },
  actions: {
    // 思路一：服务器返回的页面标识权限，和本地完整的动态路由的name进行匹配
    filterRoutes(ctx, menuMarks) {
      // asyncRoutes是本地完整的动态路由 【已经是数】
      // menuMarks是服务器返回的标识 【一维数组，但是还没有整理成树】
      // console.log(menuMarks)
      // console.log(asyncRoutes)
      // 筛选动态路由
      const userAsyncRoutes = []
      // 遍历完整的动态路由,判断路由的name是否在服务器返回的标识里面
      asyncRoutes.forEach(item => {
        // item是每一个一级路由
        // 只处理一级
        if (menuMarks.find(obj => obj.mark === item.name)) {
          // 有子级
          if (item.children && item.children.length) {
            // 存放子级,val是每个二级
            const temp = item.children.filter(val => {
              // 筛选出的二级路由，把筛选出的二级路由重新赋值给asyncRoutes中的二级路由
              return menuMarks.find(o => o.mark === val.name)
            })
            item.children = temp
          }

          userAsyncRoutes.push(item)
        }
      })
      userAsyncRoutes.push({ path: '*', redirect: '/404', hidden: true })
      ctx.commit('setRoutes', userAsyncRoutes)
      return userAsyncRoutes
    }
  }
}
